home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_08_1985_Transactor_Publishing.d64 / hi-res text src (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  6KB  |  248 lines

  1. 100 rem hi-res text maker
  2. 110 rem by darren james spruyt
  3. 120 rem box 1226
  4. 130 rem gravenhurst, ontario
  5. 140 rem p0c 1g0
  6. 150 rem
  7. 160 sys 700
  8. 170 .opt oo
  9. 180 *=$8000
  10. 190 base   =$6000
  11. 200 temp   =$02b6
  12. 210 tmp1   =$02b7
  13. 220 tmp2   =$02b8
  14. 230 pntr1  =$02b9
  15. 240 cntr1  =$02ba
  16. 250 charow =$02bb
  17. 260 cntr2  =$02ac
  18. 270 cntr3  =$02ad
  19. 280 color  =$0335
  20. 290 additi =$0334
  21. 300 ;
  22. 310 ;followin jmp table
  23. 320 jmp hion
  24. 330 jmp clear
  25. 340 jmp hioff
  26. 350 ;
  27. 360 ;start of code
  28. 370 print =*
  29. 380 ;
  30. 390 ;create base address
  31. 400 lda #>base
  32. 410 sta $23          ;set high address
  33. 420 lda #<base       ;a=lo address
  34. 430 ldx $02a7        ;character row
  35. 440 beq p1           ;for each
  36. 450 p3 clc           ;row
  37. 460 adc #$40         ;add to base
  38. 470 bcc p2           ;address, 320
  39. 480 inc $23          ;or $0140 in hex
  40. 490 p2 inc $23       ;
  41. 500 dex              ;done
  42. 510 bne p3           ;no
  43. 520 p1 ldx $02a6     ;column address
  44. 530 beq p4           ;for each column
  45. 540 p6 clc           ;add 8
  46. 550 adc #$08         ;to the base
  47. 560 bcc p5           ;address
  48. 570 inc $23          ;
  49. 580 p5 dex           ;doneprint
  50. 590 bne p6           ;no
  51. 600 p4 sta $22       ;save lo address
  52. 610 ;
  53. 620 ;copy char data from rom
  54. 630 ;to $02ae
  55. 640 sei              ;lockout irq
  56. 650 lda $01
  57. 660 and #%11111011   ;make d rom
  58. 670 sta $01          ;visible
  59. 680 lda #$00         ;generate
  60. 690 sta $15
  61. 700 lda $02ab        ;indirect
  62. 710 sta $14
  63. 720 asl $14          ;based
  64. 730 rol $15
  65. 740 asl $14          ;on
  66. 750 rol $15
  67. 760 asl $14          ;character number
  68. 770 rol $15
  69. 780 clc              ;times 8
  70. 790 lda #$d8
  71. 800 adc $15          ;plus $d000
  72. 810 sta $15
  73. 820 ldy #$07         ;copy character
  74. 830 l1 lda ($14),y
  75. 840 sta $02ae,y      ;bit patterns
  76. 850 dey
  77. 860 bpl l1           ;from rom
  78. 870 lda $01
  79. 880 ora #%00000100
  80. 890 sta $01          ;close rom up
  81. 900 cli              ;release irq
  82. 910 lda #0           ;initialize
  83. 920 sta charow       ;char pixel rows
  84. 930 sta cntr3        ;screen pixel row
  85. 940 z15 lda $02aa
  86. 950 sta cntr2        ;y multiple size
  87. 960 z13 lda cntr3
  88. 970 sta pntr1        ;y val for screen
  89. 980 ldx charow       ;current char row
  90. 990 ldy #$07         ;break bits
  91. 1000 z1 ror $02ae,x   ;into bytes at
  92. 1010 bcs z2           ;$033c
  93. 1020 lda #$00
  94. 1030 .byte $2c
  95. 1040 z2 lda #$ff
  96. 1050 sta $033c,y
  97. 1060 dey              ;done break
  98. 1070 bpl z1           ;no
  99. 1080 ror $02ae,x      ;finish rotation
  100. 1090 lda #0
  101. 1100 sta temp         ;set temp
  102. 1110 lda #$08
  103. 1120 sta cntr1        ;set rotations 8
  104. 1130 ldx #$00
  105. 1140 z8  ldy $02a9    ;get x multiple
  106. 1150 z5 lda $033c,x   ;test bit values
  107. 1160 beq z3           ;zero means 0
  108. 1170 sec              ;rotate a 1 in
  109. 1180 rol temp
  110. 1190 jmp z4
  111. 1200 z3 clc           ;rotate a 0 in
  112. 1210 rol temp
  113. 1220 z4 dec cntr1     ;done 8 shifts
  114. 1230 beq z6           ;yes - to screen
  115. 1240 z7  dey          ;check multiples
  116. 1250 bne z5           ;do more
  117. 1260 inx              ;check all 8 bits
  118. 1270 cpx #$08         ;are done
  119. 1280 bne z8           ;no - do more
  120. 1290 jmp z9          ;
  121. 1300 z6 =*           ;
  122. 1310 sty tmp1        ;save y
  123. 1320 stx tmp2        ;save x
  124. 1330 ldy pntr1       ;get y pntr
  125. 1340 lda additi      ;mesh mode
  126. 1350 beq z23         ;no
  127. 1360 lda ($22),y     ;get prev pattern
  128. 1370 z23 ora temp    ;add new pattern
  129. 1380 sta ($22),y     ;back to screen
  130. 1390 lda #0          ;set temp to zero
  131. 1400 sta temp
  132. 1410 lda #8          ;set cntr
  133. 1420 sta cntr1
  134. 1430 lda pntr1       ;add 8 tp pntr1
  135. 1440 clc             ;to get
  136. 1450 adc #$08        ;to the next
  137. 1460 sta pntr1       ;row
  138. 1470 ldy tmp1        ;restore x and y
  139. 1480 ldx tmp2
  140. 1490 jmp z7          ;recurse
  141. 1500 z9 inc cntr3    ;count pixel rows
  142. 1510 lda cntr3
  143. 1520 cmp #$08        ;at eight
  144. 1530 bne z10         ;nope
  145. 1540 lda #$00
  146. 1550 sta cntr3       ;re-set counter
  147. 1560 clc
  148. 1570 lda $22         ;add 320
  149. 1580 adc #$40
  150. 1590 bcc z11         ;to the indirect
  151. 1600 inc $23
  152. 1610 z11 inc $23     ;address ($22)
  153. 1620 sta $22
  154. 1630 z10 dec cntr2   ;y multiples
  155. 1640 beq z12         ;done
  156. 1650 jmp z13         ;repeat previos ro
  157. 1660 z12  inc charow ;chr  pixel row
  158. 1670 lda charow      ;
  159. 1680 cmp #$08        ;done all 8 rows
  160. 1690 beq z14         ;yes then finished
  161. 1700 jmp z15         ;do next row
  162. 1710 z14 =*
  163. 1720 ;add colour as indicated
  164. 1730 lda #$5c        ;build the
  165. 1740 sta $15
  166. 1750 lda #$00        ;indirect
  167. 1760 ldx $02a7
  168. 1770 beq j2          ;address
  169. 1780 j3 clc
  170. 1790 adc #$28        ;via base
  171. 1800 bcc j1
  172. 1810 inc $15         ;of $5c00
  173. 1820 j1 dex
  174. 1830 bne j3          ;plus y pos *40
  175. 1840 j2 clc
  176. 1850 adc $02a6       ;and  x pos
  177. 1860 sta $14
  178. 1870 bcc j7
  179. 1880 inc $15         ;done
  180. 1890 j7 =*
  181. 1900 ldx $02aa       ;get y size
  182. 1910 j6 ldy $02a9    ;get x size
  183. 1920 dey
  184. 1930 lda color       ;get color val
  185. 1940 j4 sta ($14),y  ;put in mem
  186. 1950 dey             ;done x
  187. 1960 bpl j4          ;no
  188. 1970 lda $14         ;add 40
  189. 1980 clc
  190. 1990 adc #$28        ;to the address
  191. 2000 bcc j5
  192. 2010 inc $15         ;done
  193. 2020 j5 sta $14
  194. 2030 dex             ;done y
  195. 2040 bne j6          ;no
  196. 2050 rts
  197. 2060 hion =*
  198. 2070 lda $d011
  199. 2080 ora #%00100000   ;turn hi-res bit
  200. 2090 sta $d011
  201. 2100 lda #%01111000
  202. 2110 sta $d018        ;set screen/map
  203. 2120 lda $dd00
  204. 2130 and #%11111100
  205. 2140 ora #%00000010
  206. 2150 sta $dd00        ;set vic chip
  207. 2160 rts              ;addresses
  208. 2170 hioff =*
  209. 2180 lda $d011
  210. 2190 and #%11011111   ;re-set bit map
  211. 2200 sta $d011
  212. 2210 lda #21
  213. 2220 sta $d018        ;reset screenmap
  214. 2230 lda $dd00
  215. 2240 and #%11111100
  216. 2250 ora #%00000011
  217. 2260 sta $dd00        ;reset vic chip
  218. 2270 rts              ;address
  219. 2280 clear ldy #0
  220. 2290 lda #>base       ;base address
  221. 2300 sta $15          ;into
  222. 2310 sty $14          ;($14)
  223. 2320 ldx #32          ;do 32 pages
  224. 2330 lda #00          ;
  225. 2340 t6 sta ($14),y   ;zero memory
  226. 2350 dey
  227. 2360 bne t6
  228. 2370 inc $15
  229. 2380 dex              ;doneprint
  230. 2390 bne t6           ;no
  231. 2400 lda $d021        ;pull old color
  232. 2410 and #%00001111   ;from vic chip
  233. 2420 sta $02
  234. 2430 asl
  235. 2440 asl
  236. 2450 asl              ;shift to high
  237. 2460 asl              ;nybble
  238. 2470 ldy #0
  239. 2480 ora $02          ;low nybble
  240. 2490 j53 sta $5c00,y  ;fill
  241. 2500 sta $5d00,y      ;color
  242. 2510 sta $5e00,y      ;area
  243. 2520 sta $5f00-24,y   ;up
  244. 2530 iny
  245. 2540 bne j53
  246. 2550 rts
  247. 2560 .end
  248.